extends Node

var 场景层:Node=null
var 弹窗层:Node=null

var 弹窗队列 = []
var 识别码:int=0

	
func 初始化(_场景层, _弹窗层):
	场景层=_场景层
	弹窗层=_弹窗层	

#region  场景部分
var 当前场景:Node=null:
	set(value):
		if 当前场景:
			当前场景.退出()			
			场景层.remove_child(当前场景)
			当前场景.queue_free()
		当前场景=value
		if 当前场景:
			场景层.add_child(当前场景)
	
var 当前弹窗:Node=null
		
func 切换场景(场景id:String,data:Dictionary={}):
	var 场景类=GameViewRegister.获取场景(场景id)
	if 场景类:
		当前场景=场景类.instantiate()
		当前场景.初始化(data)
		return 当前场景
	return null
#endregion

#region  弹窗部分	
func 获取识别码()->int:
	识别码+=1
	return 识别码
	
func 获取弹窗(id):
	for 弹窗 in 弹窗层.get_children():
		if typeof(id)==TYPE_INT and 弹窗.识别码==id:
			return 弹窗
		elif typeof(id)==TYPE_STRING and 弹窗.弹窗id==id:
			return 弹窗
	return null
	
func 打开弹窗(弹窗id,data:Dictionary={}):
	if 弹窗id=="事件":
		_打开事件弹窗(弹窗id,data)
	else:
		_打开普通弹窗(弹窗id,data)
	
func _打开普通弹窗(弹窗id,data:Dictionary={}):
	var 弹窗类=GameViewRegister.获取场景(弹窗id)
	if 弹窗类:
		var 弹窗=弹窗类.instantiate()
		弹窗.弹窗id=弹窗id	
		弹窗.识别码=获取识别码()
		弹窗层.add_child(弹窗)
		弹窗.初始化(data)
		
func 关闭弹窗(id):
	var 弹窗=获取弹窗(id)
	if 弹窗:
		弹窗.退出()
		弹窗层.remove_child(弹窗)
		弹窗.queue_free()			

func _打开事件弹窗(弹窗id,data:Dictionary={}):
	var 弹窗类=GameViewRegister.获取场景(弹窗id)
	if 弹窗类:
		var 弹窗=弹窗类.instantiate()
		弹窗.弹窗id=弹窗id	
		弹窗.识别码=获取识别码()
		弹窗.data=data
		if 当前弹窗 == null:
			弹窗层.add_child(弹窗)
			弹窗.初始化(弹窗.data)
			当前弹窗 = 弹窗
			当前弹窗.close_requested.connect(_当弹窗关闭)
		else:
			弹窗队列.push_back(弹窗)
			
func _当弹窗关闭():
	if 弹窗队列.is_empty():
		当前弹窗 = null
	else:
		var 弹窗= 弹窗队列.pop_front()
		弹窗层.add_child(弹窗)
		弹窗.初始化(弹窗.data)
		当前弹窗 = 弹窗
		当前弹窗.close_requested.connect(_当弹窗关闭)

	GameCore.event_ended.emit()
#endregion
